有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JSTL<c:if>标记中的java测试属性

我在JSP中看到了如下代码

<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>">
    <li>user</li>
</c:if>

我的困惑在于test属性的值中出现的“=”。我的理解是<%= %>中包含的任何内容都会打印到输出中,但分配给test的值肯定是布尔值,那么为什么这样做呢

对于奖励积分,是否有任何方法可以更改上面的属性值,使其不使用scriptlet代码?据推测,这意味着使用EL代替

干杯, 唐


共 (5) 个答案

  1. # 1 楼答案

    JSP标记库中的属性通常可以是静态的,也可以在请求时解析。如果在请求时解析它们,JSP将在运行时解析它们的值,并将输出传递给标记。这意味着您可以将几乎任何JSP代码放入属性中,标记的行为将与生成的输出相应

    如果查看jstl taglib文档,您可以看到哪些属性是最新时间,哪些不是http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html

  2. # 2 楼答案

    你也可以使用

    <c:if test="${ testObject.testPropert == "testValue" }">...</c:if>
    
  3. # 3 楼答案

    test属性用来确定某个内容是否为真的所有内容都是字符串“true”(区分大小写)。例如,下面的代码将打印“Hello world!”

    <c:if test="true">Hello world!</c:if>
    

    <%= %>内的代码返回一个布尔值,因此它将打印字符串“true”或“false”,这正是<c:if>标记所寻找的

  4. # 4 楼答案

    <;%%=%>;它本身将被发送到输出,在JSTL的上下文中,它将被计算为一个字符串

  5. # 5 楼答案

    <;%=%之间的表达式>;在计算c:if标记之前计算。那么,假设|请求。isUserInRole |返回| true |,您的示例将首先评估为:

    <c:if test="true">
        <li>user</li>
    </c:if>
    

    然后执行c:if标记